# 1、打印小猫爱吃鱼，小猫要喝水







# 	定义猫类
from self import self


class Cat:
#属性  无
#方法  吃    食物   可以外界给与   字符串
    def eat(self,food):
        print(f"小猫吃{food}")
#       喝    水     可以基于，  字符串
    def drink(self,drink):
        print(f"小猫爱喝{drink}")




if __name__ == '__main__':
    c1 = Cat()
    #调用实例话方法
    c1.eat("老鼠")

    c2 = Cat()

    c2.drink("可乐")

# 2、小明爱跑步，爱吃东西。
class People():
    #类的属性：姓名、体重
    def __init__(self,n,w):
        # 姓名  字符串  需要外界给与
        self.name = n
        # 体重  数值类型  需要外界给与
        self.weight = w
#     1）小明体重75.0公斤
#     2）每次跑步会减肥0.5公斤
    def run(self):
        self.weight -= 0.5
#     3）每次吃东西体重会增加1公斤
    def eat(self):
        self.weight += 1
#     4）小美的体重是45.0公斤
    def __str__(self):
        return f"我的名字是{self.name},我的体重是{self.weight}"
#
if __name__ == '__main__':
    p1 = People("小明",75)

    #调用实例化属性
    print(p1.weight)
    p1.run()
    print(p1.weight)
    p1.eat()
    print(p1.weight)
    p2 = People("小名",45)
    print(p1)
    print(p2)








# 3、摆放家具
#     需求：
#     1）.房子有户型，总面积和家具名称列表
#        新房子没有任何的家具
#     2）.家具有名字和占地面积，其中
#        床：占4平米
#        衣柜：占2平面
#        餐桌：占1.5平米
#     3）.将以上三件家具添加到房子中
#     4）.打印房子时，要求输出:户型，总面积，剩余面积，家具名称列表
#需要定义房子的类：房子类，家具类
#家具类
class jiaju:
#属性：名称，面积
      def __init__(self,n,a):
#名称   外界给与  字符串
        self.name = n
#面积   外界给与   数值类型
        self.area = a
#方法  无
      def __str__(self):
        return f"这个家具的名字是{self.name},面积是{self.area}"
#房子类
class House:
#属性#
    def __init__(self,a,area):
        #户型     外界给与   字符串
        self.apartment = a
        # 总面积  外界给与  数值
        self.total_area = area
        #家具列表  外界给与  列表
        self.item_list = []
        #剩余面积  初始剩余面积为总面积
        self.free_area = self.total_area
    #方法
    #摆放家具
    def add_item(self,item):
        #判断家里的剩余面积是否大于家具面积
        if item.area<self.free_area:
            #拜访家具加入家具列表
            self.item_list.append(item.name)
            #剩余面积 == 家具面积
            self.free_area -= item.area
        else:
            print("装不下")

    def __str__(self):
        return f"房子的户型是{self.apartment},总面积是{self.total_area},家具有{self.item_list}"






if __name__ == '__main__':

#调试
#实例化家具类
    bed = jiaju("桌子",150)
    print(bed)
    print(bed.name)
    print(bed.area)

    h1 = House("三局",180)
    print(h1)
    h1.add_item(bed)
    print(h1)

















# 4.士兵开枪
#     需求：
#     1）.士兵瑞恩有一把AK47
#     2）.士兵可以开火(士兵开火扣动的是扳机)
#     3）.枪 能够 发射子弹(把子弹发射出去)
#     4）.枪 能够 装填子弹 --增加子弹的数量

"""
需要定义的类：士兵类、枪类
枪类：
    属性：
        型号         需要外界给予  字符串
        子弹数量      初始量0    数值   
    方法：
        发射：
            判断剩余子弹是否大于0
                是：
                    射击：biu
                    子弹数量
        装填子弹 ：
            子弹数量+5
            
士兵类：
    属性：姓名，武器
        姓名  外界给与  字符
        武器  外界给与   枪的实例对象
    方法：
        射击：
          扣动扳机

"""
# 需要定义的类：士兵类、枪类
class Gun:
# 枪类：
# 属性：
    def __init__(self,n):
# 型号
# 需要外界给予
# 字符串
# 子弹数量
        self.name = n
# 初始量0
# 数值
        self.zidan_count = 0
# 方法：
# 发射：
    def shot(self):
# 判断剩余子弹是否大于0
# 是：
        if self.zidan_count > 0:
            # 射击：biu
            print("biu~~")
            # 子弹数量
            self.zidan_count -= 1


        else:
            #提示没子弹，投降
            print("大哥，我错了")
            # 装填子弹 ：
            # 子弹数量 + 5
    def add_zidan(self):
        self.zidan_count += 5
    def __str__(self):
        return f"枪的型号{self.name},剩余子弹{self.zidan_count}"
# 士兵类：
class Solider:
    # 属性：姓名，武器
    def __init__(self,n,w):

    # 姓名 外界给  字符
        self.name = n
    # 武器 外界给与
        self.weapon = w
    # 枪的实例对象
    def fire(self):
    # 方法：
        self.weapon.shot()
    def add_biu(self):
    # 射击：
    # 扣动扳机
        self.weapon.add_zidan()

    def __str__(self):
        return f"我的名字是{self.name},我的武器是{self.weapon}"

if __name__ == '__main__':
    #实例化
    ak = Gun("AK")
    # print(ak)
    # ak.shot()
    # print(ak)

    #实例化士兵类
    ruien =  Solider("瑞恩",ak)
    print(ruien)
    ruien.fire()
    ruien.add_biu()

    print(ruien)
    ruien.fire()
    print(ruien)


